50.9 聚合多个来源的指标

Spring Boot提供一个AggregateMetricReader,用于合并来自不同物理来源的指标。具有相同逻辑指标的来源只需将指标加上以句号分隔的前缀发布出去,reader会聚合它们(通过截取指标名并丢掉前缀),计数器被求和,所有东西(比如gauges)都采用最近的值。

这非常有用,特别是当有多个应用实例反馈数据到中央仓库(比如Redis),并且你想展示结果。推荐将MetricReaderPublicMetrics结果连接到/metrics端点。

示例:

@Autowired
private MetricExportProperties export;

@Bean
public PublicMetrics metricsAggregate() {
  return new MetricReaderPublicMetrics(aggregatesMetricReader());
}

private MetricReader globalMetricsForAggregation() {
  return new RedisMetricRepository(this.connectionFactory,
      this.export.getRedis().getAggregatePrefix(), this.export.getRedis().getKey());
}

private MetricReader aggregatesMetricReader() {
  AggregateMetricReader repository = new AggregateMetricReader(
      globalMetricsForAggregation());
  return repository;
}

上面的示例使用MetricExportProperties注入和提取key和前缀,这是Spring Boot提供的便利设施,并且默认值是合适的,它们是在MetricExportAutoConfiguration中设置的。

上面的MetricReaders不是@Beans,也没注解@ExportMetricReader,因为它们只收集和分析来自其他仓库的数据,不需要暴露自己的值。